#ifndef EVENTCENTER_H
#define EVENTCENTER_H
#include <QObject>
#include <qlistwidget.h>
#include <QDialog>
#include <QLabel>
#include <QMessageBox>
#include "Render/particlesystem.h"
#include "GameUI/recorditem.h"
//UI编辑器中的鼠标事件
enum BUTTONEVENT
{
    NONE,//默认值，无事件
    OPEN,//打开界面
    QUIT,//退出游戏
    CLOSESOUND,//关闭声音
    OPENSOUND,//打开声音
};

class EventCenter:public QObject
{
    Q_OBJECT
public:
    EventCenter(const EventCenter&) = delete;
    EventCenter& operator = (const EventCenter&) = delete;
    static EventCenter& Instance();
    ~EventCenter();
    bool GetApplicationMode();
    void Warning(QString s);

private:
    bool RELEASE_MODE = false;
    QMessageBox* message = nullptr;

    EventCenter();
    void Init();
signals:
    void ClickFileItem(QListWidgetItem * item);
    void DoubleClickFileItem(QListWidgetItem* item);
    void NextDialog(bool noBranch = false);
    void RenderInitOver();
    void ApplicationMode(bool release);
    //运行态和编辑态的转换。
    void RunNarration(int id);
    void ShowNarrationItem(int id);
    void TextEdit(QString& name,QString& text);
    void RefreshFileList(QString& path);
    void DragImage(QString& path);
    //将图片资源拖入到渲染窗
    void Save();
    //保存
    void Modify();
    //有所修改
    void AddNode(int id);
    //新建空节点
    void RefreshCurNodeItem();
    //节点有修改，刷新其在节点窗显示的内容
    void ChangeCurNode();
    //当前选中的节点改变
    void DeleteData(QString& s);
    //在UI编辑器中当有控件被选中时要emit此信号，使其他控件除去红框
    void SelectUIChanged();
    //UI编辑器拖入控件时获取控件信息
    void GetDragKJInfo();
    //UI编辑器某控件信息被修改
    void UIChange(QString name);
    //跳转到某页面
    void GoToWidget(QString name);
    //UI编辑器某控件info被删除
    void UIDelete(QString name);
    //改变粒子特效[EffectEditWidget->RenderWidget]
    void ChangeParticleSystem(ParticleSystemInfo* info);
    //添加特效
    void AddEffect(QString name);
    //删除特效
    void DeleteEffect(QString name);
    //改变字速
    void ChangeTextV(int v);
    //RenderWidget用于获取特效信息
    void GetParticleInfo();
    //添加图鉴
    void AddAlbum(QString path);
    //删除图鉴
    void DeleteAlbum(QString path);
    //删除存档
    void DeleteRecord(int id);
    //添加存档
    void AddRecord();
    //运行某个存档
    void RunRecord(RecordItem* item);
    //linker编辑完成后通知菜单栏刷新名字
    void LinkerEditFinish();
    //刷新数值
    void RefreshData();
    //刷新图鉴
    void RefreshAlbum(QVector<QString> album);
    //改名
    void ChangeWindowName(QString name);
    //节点之间进行过渡,时间单位是毫秒
    void Black(int m_second);
    //只渐亮不渐暗
    void BlackLighter(int ms);
    //（游戏模式）直接运行
    void RunGame();

public slots:
};

#endif // EVENTCENTER_H
